// 定义一个模块，并导出

import { ApiRes, Profile } from "@/types/data";
import { getProfile, removeProfile, setProfile } from "@/utils/Profile";
import request from "@/utils/request";
import { defineStore } from "pinia";

export default defineStore('user', {
  state(){
    return {
      // // 数据持久化 -- 取
      // profile: {} as Profile
      profile: getProfile() as Profile
    }
  },
  actions: {
    
    // 绑定当前的QQ和账号
    async qqBindLogin(openId: string, mobile: string, code: string) {
      const res = await request.post<ApiRes<Profile>>('/login/social/bind', {
        mobile,
        code,
        unionId: openId
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      // 2. 持久化
      setProfile(res.data.result)
    },

    // 绑定qq的短信验证码
    async sendQQBindMsg(mobile: string) {
      await request.get('/login/social/code', {
        params: {
          mobile
        }
      })
    },
    // 用户登录账号
    async login (data:{account:string,password:string}) {
      const res = await request.post<ApiRes<Profile>>('/login',data)
      this.profile = res.data.result
      // 数据持久化 -- 存
      setProfile(res.data.result)

    },
    // 获取手机登录验证码+手机号
    async sendMobileMsg(mobile: string) {
       await request.get('/login/code', {
        params: {
         mobile
        }
      })
    },
    // 获取手机验证码+手机号
    async mobileLogin(mobile: string, code: string) {
      const res = await request.post<ApiRes<Profile>>('/login/code', {
        mobile,
        code
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
    },
    // 退出
    logout () {
      // 1. 删除pinia
      this.profile = {} as Profile
      // 2. 清空本地
      removeProfile()
    },
       //  source: 1为pc，2为webapp，3为微信小程序, 4为Android, 5为ios, 6为qq, 7为微信
       async loginQQ (openId: string) {
        const res = await request.post<ApiRes<Profile>>('/login/social', {
          unionId: openId,
          source: 6
        })
        this.profile = res.data.result
        // 持久化
        setProfile(res.data.result)
  },

  // 数据持久化 --cv 使用 (和state平级)
  persist: {
    enabled: true,
    strategies: [{key:'abc'}]
  }
}
})
